[Lambda]Provisioned Concurrencyを使用率でAutoScalingさせる #reinvent
コンニチハ、千葉です。
コールドスタート対策としてProvisioned ConcurrencyがLambdaに追加されました。
[速報]コールドスタート対策のLambda定期実行とサヨナラ!! LambdaにProvisioned Concurrencyの設定が追加されました #reinvent
事前にプロビジョニングする数を指定しプールできます。今回は、Application AutoScalingを利用しプールする数をチューニングしてみたいと思います。プロビジョニングの実際の使用率でスケールさせます。マネージメントコンソールをみたのですが、Lambdaは指定できなかったのでAWS CLIを利用し設定を行いました。
やってみた
Lambdaは手動で作成し、プロビジョニングされた同時実行は5と設定してあります。エイリアスは、autoscalingという名前で作成しました。
使用率ベースのAutoScaling
まずは、作成したLambdaのエイリアスと、AutoScalingのターゲットとして登録します。キャパシティは、min 1、 max 10と指定しました。
$ aws application-autoscaling register-scalable-target --service-namespace lambda \ --resource-id function:autoscaling-test:autoscaling --min-capacity 1 --max-capacity 10 \ --scalable-dimension lambda:function:ProvisionedConcurrency
次にスケーリングポリシーを適用します。プールの使用率が70%になった場合にスケールするように設定します。
$ aws application-autoscaling put-scaling-policy --service-namespace lambda \ --scalable-dimension lambda:function:ProvisionedConcurrency --resource-id function:autoscaling-test:autoscaling \ --policy-name my-policy --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration '{ "TargetValue": 0.7, "PredefinedMetricSpecification": {"PredefinedMetricType": "LambdaProvisionedConcurrencyUtilization" }}'
設定できました。試しに、同時実行させてみます。AutoScaling用のCloudWatchアラームを見ると、閾値を超えています。
そしてプロビジョニング同時実行数が、自動で拡張されていることを確認できました。
確認できたので、スケーリングポリシーとターゲットを削除します。
$ aws application-autoscaling describe-scaling-policies --service-namespace lambda $ aws application-autoscaling delete-scaling-policy --policy-name my-policy --service-namespace lambda --resource-id function:autoscaling-test:autoscaling --scalable-dimension lambda:function:ProvisionedConcurrency $ aws application-autoscaling describe-scalable-targets --service-namespace lambda $ aws application-autoscaling deregister-scalable-target --service-namespace lambda --resource-id function:autoscaling-test:autoscaling --scalable-dimension lambda:function:ProvisionedConcurrency
さいごに
Application AutoScalingを利用して、Lambdaの事前プロビジョニングされた同時実行数をチューニングしてみました。今回は、事前にプロビジョニングした量に対し、70%超えになった場合にスケールするように設定しました。プロビジョニング完了までにはラグがありますが、スパイクなどの読めないアクセスに自動的にスケールされることができるので素敵だと思います。